﻿#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif

	/*//1.链表节点数据类型；
	struct OneWayLinkNode
	{
		void* data;
		struct OneWayLinkNode* next;
	};

	//2.链表的数据类型；
	struct OneWayLinkList
	{
		//3.头节点；
		struct OneWayLinkNode header;
		int size;
	};*/

	//4.自定义void*类型LinkList；
	typedef void* LinkList;
	//8.自定义函数指针类型FOREACH；
	typedef void(*FOREACH)(void*);
	//23.自定义函数指针类型COMPARE；
	typedef int(*COMPARE)(void*, void*);

	//5.初始化链表；
	LinkList Init_OneWayLinkList();
	//6.插入节点，按位置插入；
	void Insert_OneWayLinkList(LinkList list, int pos, void* data);
	//7.遍历链表；
	Foreach_OneWayLinkList(LinkList list, FOREACH myForeach);
	//19.按位置删除链表中的元素；
	void RemoveByPos_OneWayLinkList(LinkList list, int pos);
	//20.按值删除链表中的元素；
	void RemoveByVal_OneWayLinkList(LinkList list, void* data, COMPARE compare);
	//21.清空链表；
	void Clear_OneWayLinkList(LinkList list);
	//22.获取链表的大小；
	int Size_OneWayLinkList(LinkList list);
	//24.销毁链表；
	void Destroy_OneWayLinkList(LinkList list);

#ifdef __cplusplus
}
#endif
